package in.lib.holder; import in.lib.adapter.PostAdapter; import in.lib.annotation.InjectView; import in.lib.helper.ThemeHelper; import in.lib.holder.base.MessageHolder; import in.lib.manager.SettingsManager; import in.lib.utils.Views; import in.model.Post; import in.obj.annotation.Annotation; import in.obj.annotation.Annotation.Type; import in.obj.annotation.ImageAnnotation; import in.obj.annotation.VideoAnnotation; import in.rob.client.MainApplication; import in.rob.client.R; import android.graphics.Bitmap; import android.net.Uri; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener; /** * View holder for list item which holds references * to the views so its like uber quick * @author Robin */ public class PostHolder extends MessageHolder { @InjectView(R.id.reposted_by) public TextView repostedBy; @InjectView(R.id.crosspost) public TextView crosspost; @InjectView(R.id.is_convo) public ImageView isInConvo; @InjectView(R.id.star) public ImageView starButton; @InjectView(R.id.repost) public ImageView repostButton; @InjectView(R.id.more) public ImageView moreButton; @InjectView(R.id.media_image) public ImageView media; @InjectView(R.id.missing_posts) public View missingPosts; @InjectView(R.id.missing_posts_top) public View missingPostsTop; @InjectView(R.id.stream_marker) public View streamMarker; public PostHolder(View convertView) { super(convertView); Views.inject(this, convertView); } @Override public void onViewDestroyed(View v) { super.onViewDestroyed(v); if (media != null) { media.setImageBitmap(null); ImageLoader.getInstance().cancelDisplayTask(media); //media.setTag(null); } } /** * Method to use when populating a view's members with the * data from post. * @param holder The holder containing the views * @param post The post object */ public void populate(Post post, PostAdapter adapter, boolean inThread) { super.populate(post, adapter); if (media != null) { ImageLoader.getInstance().cancelDisplayTask(media); media.setImageBitmap(null); mediaContainer.setVisibility(View.GONE); } if (streamMarker != null) { streamMarker.setVisibility(View.GONE); if (SettingsManager.isStreamMarkerEnabled()) { if (adapter.getStreamMarker().getId().equals(post.getId())) { streamMarker.setVisibility(View.VISIBLE); } } } if (post.getHasReplies() && !inThread) { isInConvo.setVisibility(View.VISIBLE); } else { isInConvo.setVisibility(View.GONE); } if (post.isRepost() && post.getReposter() != null && !inThread) { repostedBy.setVisibility(View.VISIBLE); String repostedStr = new StringBuilder() .append(repostedBy.getContext().getString(R.string.reposted_by)) .append(" @") .append(post.getReposter().getMentionName()) .append(" ") .append(post.getReposter().getUserName()) .toString(); repostedBy.setText(repostedStr); } else { repostedBy.setVisibility(View.GONE); } if (post.isCrossPost() && !TextUtils.isEmpty(post.getCrossPostUrl())) { String crosspostStr = new StringBuilder() .append(crosspost.getContext().getString(R.string.crosspost)) .append(" ") .append(Uri.parse(post.getCrossPostUrl()).getHost()) .toString(); crosspost.setVisibility(View.VISIBLE); crosspost.setText(crosspostStr); } else { crosspost.setVisibility(View.GONE); } if (post.getPoster().isYou()) { repostButton.setVisibility(View.GONE); } if (post.isStarred()) { int starred = ThemeHelper.getDrawableResource(starButton.getContext(), R.attr.rbn_icon_starred); starButton.setImageResource(starred); } else { int unstarred = ThemeHelper.getDrawableResource(starButton.getContext(), R.attr.rbn_icon_unstarred); starButton.setImageResource(unstarred); } ImageLoader.getInstance().cancelDisplayTask(media); //media.setImageBitmap(null); boolean block = SettingsManager.isInlineImagesEnabled(); block &= (!SettingsManager.isInlineImageWifiEnabled() || (SettingsManager.isInlineImageWifiEnabled() && MainApplication.isOnWifi())); block &= !inThread && media != null; if (block) { String imageToLoad = ""; if (post.getAnnotations() != null) { if (post.getAnnotations().get(Type.IN_ORDER) != null && post.getAnnotations().get(Type.IN_ORDER).size() > 0) { Annotation image = post.getAnnotations().get(Type.IN_ORDER).get(0); imageToLoad = image.getPreviewUrl(); if (!TextUtils.isEmpty(imageToLoad)) { ImageLoader.getInstance().displayImage(imageToLoad, media, MainApplication.getInlineMediaImageOptions(), new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { mediaProgress.setVisibility(View.GONE); } @Override public void onLoadingStarted(String imageUri, View view) { mediaProgress.setVisibility(View.VISIBLE); } }); media.setTag(R.id.TAG_ENTITY, image); media.setTag(R.id.TAG_IMAGE_URL, imageToLoad); if (image.getClass() == ImageAnnotation.class) { videoMediaButton.setVisibility(View.GONE); } if (image.getClass() == VideoAnnotation.class || image.getPreviewUrl().endsWith(".gif")) { videoMediaButton.setVisibility(View.VISIBLE); } mediaContainer.setVisibility(View.VISIBLE); } } } } } }